package com.simple;

import java.util.Objects;

/**
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 */
public class Question9 {

    public static void main(String[] args) {
        System.out.println(isPalindrome(0));
    }

    /**
     * 思路
     * 1. 所有负数不可能是回文数
     * 2. 末尾为0的不可能是回文数
     * 3. 从末尾取数，达到回文数当一半时，判断与前一半数是否相同
     * 3.1 达到回文数当一半，剩余数 <= 当前数
     *
     * @param x 数值
     * @return 是否回文数
     */
    private static boolean isPalindrome(int x) {
        // 所有负数不可能是回文数
        if (x < 0) {
            return false;
        }

        // 0 是回文数
        if (x == 0) {
            return true;
        }

        int surplus = x;
        int s = x % 10, reverse = 0;

        // 末尾为0 不可能是回文数
        if (Objects.equals(0, s)) {
            return false;
        }

        while (surplus > reverse) {
            reverse = reverse * 10 + s;
            surplus = surplus / 10;
            s = surplus % 10;
        }

        return reverse == surplus || reverse / 10 == surplus;
    }
}
